import CryptoJS from "crypto-js";

// 生成密钥（实际使用时建议从环境变量或服务器获取）
const SECRET_KEY = CryptoJS.enc.Utf8.parse(import.meta.env.VITE_SECRET_KEY!);
const IV = CryptoJS.enc.Utf8.parse(import.meta.env.VITE_IV!);

// 加密函数
const encryptData = (data: any) => {
  const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY, {
    iv: IV,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  });
  return encrypted.toString();
};

// 解密函数
const decryptData = (ciphertext: string | CryptoJS.lib.CipherParams) => {
  try {
    const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY, {
      iv: IV,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7,
    });
    return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
  } catch (e) {
    console.error("数据解密失败", e);
    return null;
  }
};

// 创建安全的sessionStorage包装器
export const useSecureStorage = () => {
  // 安全保存数据
  const secureSetItem = (key: string, value: any) => {
    const encryptedValue = encryptData(value);
    sessionStorage.setItem(key, encryptedValue);
  };

  // 安全获取数据
  const secureGetItem = (key: string) => {
    const encryptedValue = sessionStorage.getItem(key);
    if (!encryptedValue) return null;
    return decryptData(encryptedValue);
  };

  // 安全删除数据
  const secureRemoveItem = (key: string) => {
    sessionStorage.removeItem(key);
  };

  return {
    secureSetItem,
    secureGetItem,
    secureRemoveItem,
  };
};
